package com.shigen.demo.common.query;

import cn.hutool.core.util.StrUtil;
import com.shigen.demo.common.dto.PaginationDTO;
import lombok.Data;

/**
 * <p>
 * 泛型说明：
 *     <ul>
 *         <li>T：直接性查询条件对象</li>
 *         <li>R：模糊查询条件对象</li>
 *         <li>泛型对象可以为空，为空时不进行查询</li>
 *         <li>泛型对象必须是一个Bean</li>
 *         <li>泛型对象的属性<b>必须是基本数据类型</b></li>
 *     </ul>
 * </p>
 *
 * @author shigenfu
 */
@Data
public class AggregateQueries<T, R> {

    /**
     * 直接性查询条件对象(T是一个Bean对象，可以根据对象的属性作为=条件查询)
     */
    private T equalsQueries;
    /**
     * 分页信息对象，可以为空，默认第1页，页容量：10
     */
    private PaginationDTO pagination;
    /**
     * 模糊查询条件对象(R是一个Bean，可以根据对象的属性作为模糊查询的条件)
     */
    private R fuzzyQueries;
    /**
     * 排序字段，为空时不进行排序
     */
    private String sortField;
    /**
     * 排序方式，为空时默认为升序，0：升序，1：降序
     */
    private Integer sortType;

    /**
     * 是否存在equals查询条件对象
     *
     * @return boolean true：存在，false：不存在
     */
    public boolean hasEqualsQueries() {
        return equalsQueries != null;
    }

    /**
     * 是否存在分页信息对象
     *
     * @return boolean true：存在，false：不存在
     */
    public boolean hasPagination() {
        return pagination != null;
    }

    /**
     * 是否存在模糊查询条件对象
     *
     * @return boolean true：存在，false：不存在
     */
    public boolean hasFuzzyQueries() {
        return fuzzyQueries != null;
    }

    /**
     * 是否存在排序字段
     *
     * @return boolean true：存在，false：不存在
     */
    public boolean hasSortField() {
        return StrUtil.isNotEmpty(sortField);
    }

    /**
     * 是否存在排序方式
     *
     * @return boolean true：存在，false：不存在
     */
    public boolean hasSortType() {
        return sortType != null;
    }
}
